/**
 * 功能：封装微信小程序中的缓存方法
 */
// 默认过期时间，单位为秒，这里设置为 1 小时
const DEFAULT_EXPIRE_TIME = 3600;

/**
 * 设置本地存储的值，并可设置过期时间
 * @param {string} k - 存储的键
 * @param {any} v - 存储的值
 * @param {number} [t=DEFAULT_EXPIRE_TIME] - 过期时间（秒），若未提供则使用默认值
 */
function cache_set(k, v, t = DEFAULT_EXPIRE_TIME) {
    // 首先将值 v 存储到本地存储中，使用键 k
    wx.setStorageSync(k, v);
    // 将传入的过期时间 t 转换为整数类型
    var seconds = parseInt(t);
    // 如果过期时间大于 0，说明需要设置过期时间
    if (seconds > 0) {
        // 获取当前时间的时间戳（毫秒）
        var newtime = Date.parse(new Date());
        // 将时间戳转换为秒，并加上过期时间，得到过期的时间戳（秒）
        newtime = newtime / 1000 + seconds;
        // 使用键 k 加上 _expire 作为新的键，将过期时间存储到本地存储中
        wx.setStorageSync(k + '_expire', newtime + "");
    } else {
        // 如果过期时间小于等于 0，删除该键对应的值
        wx.removeStorageSync(k);
        // 同时删除该键对应的过期时间
        wx.removeStorageSync(k + '_expire');
    }
}

/**
 * 从本地存储中获取值，并检查是否过期
 * @param {string} k - 要获取的键
 * @returns {any|null} - 如果键存在且未过期，返回对应的值；否则返回 null
 */
function cache_get(k) {
    // 从本地存储中获取该键对应的过期时间
    var deadtime = parseInt(wx.getStorageSync(k + '_expire'));
    // 如果存在过期时间
    if (deadtime) {
        // 获取当前时间的时间戳（秒）
        var currentTime = Date.parse(new Date()) / 1000;
        // 如果过期时间小于当前时间，说明该键值已过期
        if (parseInt(deadtime) < currentTime) {
            // 删除该键对应的值
            wx.removeStorageSync(k);
            // 删除该键对应的过期时间
            wx.removeStorageSync(k + '_expire');
            // 输出过期提示信息
            console.log("过期了");
            // 返回 null 表示该键值已过期
            return null;
        }
    }
    // 从本地存储中获取该键对应的值
    var res = wx.getStorageSync(k);
    // 如果获取到了值
    if (res) {
        // 返回该值
        return res;
    } else {
        // 如果未获取到值，返回 null
        return null;
    }
}

/**
 * 删除本地存储中的指定键值及对应的过期时间
 * @param {string} k - 要删除的键
 */
function cache_remove(k) {
    // 删除该键对应的值
    wx.removeStorageSync(k);
    // 删除该键对应的过期时间
    wx.removeStorageSync(k + '_expire');
}

/**
 * 清除本地存储中的所有键值
 */
function cache_clear() {
    // 调用 wx.clearStorageSync 方法清除所有本地存储
    wx.clearStorageSync();
}

// 导出定义的四个函数，以便在其他模块中使用
module.exports = {
  cache_set,
  cache_get,
  cache_remove,
  cache_clear
};